[RDS] 再起動なしの証明書ローテーションがサポートされていないDBエンジンが気になったので調べてみた
こんにちは!コンサル部のinomaso(@inomasosan)です。
先日、RDSの認証局(CA)についてブログで、DBエンジンによっては証明書のローテーションで再起動が必要な旨を記載しました。
describe-db-engine-versions
コマンドのSupportsCertificateRotationWithoutRestart
から、どのDBエンジンで再起動が必要なのかを確認できます。
実は前回のブログを書いた時点で、証明書の有効期限への影響や、対象となるDBエンジンのバージョンが気になっていたので調査してみました。
再起動なしの証明書ローテーションのサポート有無で有効期限はどう変わるのか
新規追加された認証局(CA)のrds-ca-rsa2048-g1、rds-ca-rsa4096-g1、rds-ca-ecc384-g1の有効性は以下の通りです。RDSはDBインスタンス証明書の有効期限が切れる前に自動的にローテーションします。
$ aws rds describe-certificates { "Certificates": [ { "CertificateIdentifier": "rds-ca-ecc384-g1", "CertificateType": "CA", "Thumbprint": "aef371e2014ce6064513cac92c0c550ab7ccf288", "ValidFrom": "2021-05-25T22:03:16+00:00", "ValidTill": "2121-05-25T23:03:16+00:00", "CertificateArn": "arn:aws:rds:ap-northeast-1::cert:rds-ca-ecc384-g1", "CustomerOverride": false }, { "CertificateIdentifier": "rds-ca-rsa4096-g1", "CertificateType": "CA", "Thumbprint": "47104f39034f4722a41ec96c1e9f9ad2342d63db", "ValidFrom": "2021-05-25T21:59:10+00:00", "ValidTill": "2121-05-25T22:59:10+00:00", "CertificateArn": "arn:aws:rds:ap-northeast-1::cert:rds-ca-rsa4096-g1", "CustomerOverride": false }, { "CertificateIdentifier": "rds-ca-rsa2048-g1", "CertificateType": "CA", "Thumbprint": "d790bbb661bafa4101829f103d639befa300f9a4", "ValidFrom": "2021-05-25T21:54:58+00:00", "ValidTill": "2061-05-25T22:54:58+00:00", "CertificateArn": "arn:aws:rds:ap-northeast-1::cert:rds-ca-rsa2048-g1", "CustomerOverride": false }, { "CertificateIdentifier": "rds-ca-2019", "CertificateType": "CA", "Thumbprint": "47a3f920645c9f9d488c7de60b86d605130016a1", "ValidFrom": "2019-09-18T16:56:20+00:00", "ValidTill": "2024-08-22T17:08:50+00:00", "CertificateArn": "arn:aws:rds:ap-northeast-1::cert:rds-ca-2019", "CustomerOverride": false } ] }
ドキュメントを確認したところ、DBエンジンのバージョンが再起動なしの証明書ローテーションのサポートしている場合は、DBインスタンス証明書の有効期限は1年であり、それ以外の場合は有効期限が3年と記載がありました。
The validity of DB server certificate depends the DB engine and DB engine version. If the DB engine version supports rotating the certificate without restart, the validity of the DB server certificate is 1 year. Otherwise the validity is 3 years.
同じ認証局を選択しても、再起動なしの証明書ローテーションのサポート有無で、DBインスタンス証明書の有効期限が異なるようです。
例えば、Oracle Standard Edition Twoの19.0.0.0.ru-2023-07.rur-2023-07.r1は再起動なしの証明書ローテーションがサポートされるため、DBインスタンス証明書の有効期限は1年となります。
一方、MariaDBの10.6.14は再起動なしの証明書ローテーションがサポートされないため、DBインスタンス証明書の有効期限は3年となります。
再起動なしの証明書ローテーションをサポートしないDBエンジンのバージョン一覧取得
describe-db-engine-versions
のリファレンスを確認したところ、--filters
による条件検索は無理だったため--query
で出力結果の項目の絞り込みを含め実装しました。
aws rds describe-db-engine-versions \ --query "DBEngineVersions[?SupportsCertificateRotationWithoutRestart==\`false\`].[Engine, EngineVersion, DBEngineDescription]"
2023/9/1時点の結果は以下となります。約750行の内容となったため折りたたんで記載しています。
サンプルコマンドの結果を見たい方はクリックして展開願います
[ [ "aurora-mysql", "5.7.mysql_aurora.2.07.9", "Aurora MySQL" ], [ "aurora-mysql", "5.7.mysql_aurora.2.07.10", "Aurora MySQL" ], [ "aurora-mysql", "5.7.mysql_aurora.2.08.3", "Aurora MySQL" ], [ "docdb", "3.6.0", "Amazon DocumentDB (with MongoDB compatibility)" ], [ "docdb", "4.0.0", "Amazon DocumentDB (with MongoDB compatibility)" ], [ "docdb", "5.0.0", "Amazon DocumentDB (with MongoDB compatibility)" ], [ "custom-sqlserver-ee", "15.00.4073.23.v1", "Microsoft SQL Server Enterprise Edition for custom RDS" ], [ "custom-sqlserver-ee", "15.00.4249.2.v1", "Microsoft SQL Server Enterprise Edition for custom RDS" ], [ "custom-sqlserver-ee", "15.00.4261.1.v1", "Microsoft SQL Server Enterprise Edition for custom RDS" ], [ "custom-sqlserver-ee", "15.00.4312.2.v1", "Microsoft SQL Server Enterprise Edition for custom RDS" ], [ "custom-sqlserver-se", "15.00.4073.23.v1", "Microsoft SQL Server Standard Edition for custom RDS" ], [ "custom-sqlserver-se", "15.00.4249.2.v1", "Microsoft SQL Server Standard Edition for custom RDS" ], [ "custom-sqlserver-se", "15.00.4261.1.v1", "Microsoft SQL Server Standard Edition for custom RDS" ], [ "custom-sqlserver-se", "15.00.4312.2.v1", "Microsoft SQL Server Standard Edition for custom RDS" ], [ "custom-sqlserver-web", "15.00.4073.23.v1", "Microsoft SQL Server Web Edition for custom RDS" ], [ "custom-sqlserver-web", "15.00.4249.2.v1", "Microsoft SQL Server Web Edition for custom RDS" ], [ "custom-sqlserver-web", "15.00.4261.1.v1", "Microsoft SQL Server Web Edition for custom RDS" ], [ "custom-sqlserver-web", "15.00.4312.2.v1", "Microsoft SQL Server Web Edition for custom RDS" ], [ "neptune", "1.1.0.0", "neptune" ], [ "neptune", "1.1.1.0", "neptune" ], [ "neptune", "1.2.0.0", "neptune" ], [ "neptune", "1.2.0.1", "neptune" ], [ "neptune", "1.2.0.2", "neptune" ], [ "neptune", "1.2.1.0", "neptune" ], [ "aurora-postgresql", "11.18", "Aurora (PostgreSQL)" ], [ "aurora-postgresql", "13.9", "Aurora (PostgreSQL)" ], [ "mariadb", "10.3.35", "MariaDB Community Edition" ], [ "mariadb", "10.3.36", "MariaDB Community Edition" ], [ "mariadb", "10.3.37", "MariaDB Community Edition" ], [ "mariadb", "10.3.38", "MariaDB Community Edition" ], [ "mariadb", "10.3.39", "MariaDB Community Edition" ], [ "mariadb", "10.4.25", "MariaDB Community Edition" ], [ "mariadb", "10.4.26", "MariaDB Community Edition" ], [ "mariadb", "10.4.27", "MariaDB Community Edition" ], [ "mariadb", "10.4.28", "MariaDB Community Edition" ], [ "mariadb", "10.4.29", "MariaDB Community Edition" ], [ "mariadb", "10.4.30", "MariaDB Community Edition" ], [ "mariadb", "10.5.16", "MariaDB Community Edition" ], [ "mariadb", "10.5.17", "MariaDB Community Edition" ], [ "mariadb", "10.5.18", "MariaDB Community Edition" ], [ "mariadb", "10.5.19", "MariaDB Community Edition" ], [ "mariadb", "10.5.20", "MariaDB Community Edition" ], [ "mariadb", "10.5.21", "MariaDB Community Edition" ], [ "mariadb", "10.6.8", "MariaDB Community Edition" ], [ "mariadb", "10.6.10", "MariaDB Community Edition" ], [ "mariadb", "10.6.11", "MariaDB Community Edition" ], [ "mariadb", "10.6.12", "MariaDB Community Edition" ], [ "mariadb", "10.6.13", "MariaDB Community Edition" ], [ "mariadb", "10.6.14", "MariaDB Community Edition" ], [ "mariadb", "10.11.4", "MariaDB Community Edition" ], [ "mysql", "5.7.37", "MySQL Community Edition" ], [ "mysql", "5.7.38", "MySQL Community Edition" ], [ "mysql", "5.7.39", "MySQL Community Edition" ], [ "mysql", "5.7.40", "MySQL Community Edition" ], [ "mysql", "5.7.41", "MySQL Community Edition" ], [ "mysql", "5.7.42", "MySQL Community Edition" ], [ "mysql", "5.7.43", "MySQL Community Edition" ], [ "sqlserver-ee", "12.00.6293.0.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "12.00.6329.1.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "12.00.6433.1.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "12.00.6439.10.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "12.00.6444.4.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "13.00.6300.2.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "13.00.6419.1.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "13.00.6430.49.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3281.6.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3294.2.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3356.20.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3381.3.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3401.7.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3421.10.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3451.2.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "14.00.3460.9.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "15.00.4043.16.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "15.00.4073.23.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "15.00.4153.1.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "15.00.4198.2.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "15.00.4236.7.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "15.00.4312.2.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ee", "15.00.4316.3.v1", "Microsoft SQL Server Enterprise Edition" ], [ "sqlserver-ex", "12.00.6293.0.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "12.00.6329.1.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "12.00.6433.1.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "12.00.6439.10.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "12.00.6444.4.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "13.00.6300.2.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "13.00.6419.1.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "13.00.6430.49.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3281.6.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3294.2.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3356.20.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3381.3.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3401.7.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3421.10.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3451.2.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "14.00.3460.9.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "15.00.4043.16.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "15.00.4073.23.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "15.00.4153.1.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "15.00.4198.2.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "15.00.4236.7.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "15.00.4312.2.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-ex", "15.00.4316.3.v1", "Microsoft SQL Server Express Edition" ], [ "sqlserver-se", "12.00.6293.0.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "12.00.6329.1.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "12.00.6433.1.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "12.00.6439.10.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "12.00.6444.4.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "13.00.6300.2.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "13.00.6419.1.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "13.00.6430.49.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3281.6.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3294.2.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3356.20.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3381.3.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3401.7.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3421.10.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3451.2.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "14.00.3460.9.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "15.00.4043.16.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "15.00.4073.23.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "15.00.4153.1.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "15.00.4198.2.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "15.00.4236.7.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "15.00.4312.2.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-se", "15.00.4316.3.v1", "Microsoft SQL Server Standard Edition" ], [ "sqlserver-web", "12.00.6293.0.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "12.00.6329.1.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "12.00.6433.1.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "12.00.6439.10.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "12.00.6444.4.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "13.00.6300.2.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "13.00.6419.1.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "13.00.6430.49.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3281.6.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3294.2.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3356.20.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3381.3.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3401.7.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3421.10.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3451.2.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "14.00.3460.9.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "15.00.4043.16.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "15.00.4073.23.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "15.00.4153.1.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "15.00.4198.2.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "15.00.4236.7.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "15.00.4312.2.v1", "Microsoft SQL Server Web Edition" ], [ "sqlserver-web", "15.00.4316.3.v1", "Microsoft SQL Server Web Edition" ] ]
再起動なしの証明書ローテーションがサポートされていないDBエンジンまとめ
2023/9/1に実行したサンプルコマンドの結果から、証明書ローテーション時に再起動が必要なDBエンジンを確認していきます。
また、RDS以外にDocumentDBやNeptuneも出力されたので、それらについても確認していきます。
Aurora MySQL
MySQL 5.7の一部の古いバージョン(2.07.9, 2.07.10, 2.08.3)のみ対象となっておりました。
AuroraもRDSと同様に証明書の自動ローテーションがサポートされている認証局を設定可能です。
Aurora PostgreSQL
構築可能な一部のバージョン(11.18, 13.9)のみ対象でした。
比較的新しいバージョンも含まれていたので、バージョンアップや新規構築時に注意が必要そうです。
MySQL
構築可能なMySQL 5.7の全てのバージョン(5.7.37 - 5.7.43)が対象でした。
MySQL 8.0は再起動なし証明書ローテーションをサポートするため、アップグレードを含めて検討するのが良さそうです。
MariaDB
構築可能な全てのバージョン(10.3.35 - 10.11.4)が対象でした。
Aurora MySQLは一部のバージョンのみ対象だったので、ちょっと意外に思いました 。
Microsoft SQL Server
全てのエディション(SQL Server Express Edition, SQL Server Web Edition, SQL Server Standard Edition, SQL Server Enterprise Edition)、全てのDBマネジメントタイプ(RDS, RDS Custom)が対象でした。
DocumentDB
構築可能な全てのバージョン(3.6.0, 4.0.0, 5.0.0)が対象でした。
DocumentDBの証明書関連のドキュメントを確認する限り、RDSのような証明書の自動ローテーションに対応した認証局の記載はありませんでした。
今回のサンプルコマンドで出力の対象となっているということは、将来的に対応する可能性があるかもなので首を長くして待ちましょう。
Neptune
EOLを迎えていない全てのバージョン(1.1.0.0 - 1.2.1.0)が対象でした。
こちらもDocumentDBと同様に、ドキュメントにRDSのような証明書の自動ローテーションに対応した認証局の記載はありませんでした。
Aurora ServerlessやRDS Proxyの証明書は関係ないんだっけ?
Aurora ServerlessやRDS ProxyにはACM証明書を利用します。
詳細が気になる方は下記のドキュメントをご確認願います。
Redshiftの証明書は関係あったり?
RedShiftの場合は、ACMによって発行されたSSL証明書を作成して各クラスターにインストールする必要があるようです。
番外編
aws rds describe-db-engine-versions
コマンドで、なぜDocumentDBやNeptuneのDBエンジンが対象になったか
率直に言うとわかりませんでした。
というのも、リファレンスの--engine
の対象一覧にDocumentDBやNeptuneが含まれていなかったからです。
本件はAWSドキュメントでフィードバック済みとなります。
AWS CLI側の意図した動作であれば、リファレンス側が更新されると思います。
--engine
にdocdb
やneptune
を指定してコマンド実行できるか?
リファレンスには記載されていないですが実行できました。
$ aws rds describe-db-engine-versions --engine docdb { "DBEngineVersions": [ { "Engine": "docdb", "EngineVersion": "3.6.0", "DBParameterGroupFamily": "docdb3.6", "DBEngineDescription": "Amazon DocumentDB (with MongoDB compatibility)", 〜省略〜
なんなら、DocumentDBのコマンドでRDS情報を取得することも可能です(Neptuneも同様)。
$ aws docdb describe-db-engine-versions { "DBEngineVersions": [ { "Engine": "aurora-mysql", "EngineVersion": "5.7.mysql_aurora.2.07.9", "DBParameterGroupFamily": "aurora-mysql5.7", "DBEngineDescription": "Aurora MySQL", "DBEngineVersionDescription": "Aurora (MySQL 5.7) 2.07.9", 〜省略〜
こちらもAWSドキュメントでフィードバックしています。
もしかすると、いつのまにか動作が変わるといったこともありえるかと思いますので、ご承知おきください。
まとめ
実際に調査してみると、再起動なしの証明書ローテーションを全てのバージョンでサポートしていないDBエンジンも存在したため、事前に確認できてよかったです。 今後、DBエンジンに選択の余地がある場合は、判断材料のひとつにしようと思います。
この記事が、どなたかのお役に立てば幸いです。それでは!